<?php 
class Connect
{
   /**
 * @var Object $conn 数据库连接字
 * @Access private
 */
 var $conn;
 var $result; 
 var $num;  //查询所得记录数
 var $error;  //错误信息
 var $row;  //一条记录
 var $insert_id; //自动增量值
 
 /**
  * 构造方法，根据给定的主机名，用户名，密码，数据库名建立与数据库的连接，
  * 如果连接失败则抛出错误。
  * 
  * @param String $host 数据库所在主机名或地址
  * @param String $user 数据库上的一个用户名
  * @param String $pwd  用户名对应的密码
  * @param String $db   需要连接的库名
  * 
  * @access public
  */
 function Connect($host="localhost",$user="root",$pwd="",$db="shenglan") {
  $this->conn  = $this->mysql_db_connect($host,$user,$pwd,$db);
 }
 
 
 /**
  * 执行一条sql语句，如果是查询语句，则返回一个以字段名为下标的二维数组；
  * 如果是一条执行语句，则返回执行结果，执行成功返回true，失败返回false。示例如下：
  * @param String $sql 需要执行的查询语句
  * @return array 以字段名为下标的数组集合或者Boolean值
  * @access public
  */
 function execute($sql) {

  if(strtolower(substr($sql,0,6))=="select")
  {
   //echo $sql;
   return $this->Query($sql);   
  } else {
   if($this->result = mysql_query($sql,$this->conn))
   
    return true;
   else
    return false;
  }  
 } 
  
 /**
  * 取得上次查询所得数据的记录数
  * @return int 查询所得记录数
  * @access public 
  */
 function getNum() {  
  return $this->num;
 }
 
 /**
  * 向指定的数据表中插入一条记录
  * @param String $table 插入数据的数据表名
  * @param Array $array 以字段名为下标的数组,如：<code>
  * 
  *  @return Boolean 插入成功返回true，失败返回false
  */ 
    function insertSql($table,$array) {
  $t1 = array();
  $t2 = array();
  foreach($array as $key=>$value) {
   $t1[] = $key;
   $t2[] = "'".$value."'";
  }
  $sql = "insert into ".$table." (".implode(",",$t1).") values (".implode(",",$t2).")";
  
  //echo $sql;
  
  if($this->execute($sql)) {
   $this->insert_id = mysql_insert_id();
   return true;
  } else
   throw new Exception("错误的SQL语句：".$sql);
 }
 
 /**
  * 取得最用一个插入有自动增量字段的自动增量值
  * @return int 最后一个自动增量值
  * @access public 
  */
 function getInsertID() {
  return $this->insert_id;
 }
 
 /**
  * 删除给定表中的数据
  * @param String $table 表名
  * @param Array $array 删除条件，用法同function insertSql($table,$array) 中的参数$array
  * @return Boolean
  * @access public
  */
 function delSql($table,$array) {
  $t1 = array();
  foreach($array as $key=>$value) {
   $t1[] = $key."='".$value."'";
  }
  $sql = "delete from ".$table." where ".implode(" and ",$t1);
  if($this->execute($sql))
   return true;
  else
   throw new Exception("错误的SQL语句：".$sql);
 }
 /**
  * 修改给定表中的数据
  * @param String $table 表名
  * @param Array $array 修改的字段名和值，用法同function insertSql($table,$array) 中的参数$array
  * @return Boolean 修改成功返回true，失败返回false
  * @access public
  */
 function updateSql($table,$array,$where=0) {
  $t1 = array();
  foreach($array as $key=>$value) {
   $t1[] = $key."='".$value."'";
   
  }  
  $sql = "update ".$table." set ".implode(", ",$t1)." where ".$where; 
//  echo $where;
  if($this->execute($sql))
   return true;
  else
   throw new Exception("错误的SQL语句：".$sql);
 }

 
 /**
  * 返回最后一次Insert或Update操作受影响的数据行数
  * @return int 行数
  * @access public
  */
 function getAffectedRows() {
  return mysql_affected_rows();
 }

 /*************** private fucntions ********************/
 /**
  *连接数据库
  *@access private
  */
 function mysql_db_connect($host,$user,$pwd,$db) {
  $conn = mysql_connect($host,$user,$pwd) or die(mysql_error());
  mysql_query("SET NAMES UTF8",$conn); 
  mysql_select_db($db,$conn) or die(mysql_error());
  return $conn;
 }

 /**
  * 执行一句查询语句，返回一个以字段名为下标的数组集合
  * 
  * @param String $sql 需要执行的查询语句
  * @return Array 以字段名为下标的数组集合
  * @access private
  */
 function Query($sql) {
  $array = array();
  if(!$this->result = mysql_query($sql,$this->conn)) {
   $this->num = 0;
   return $array;
  }
  $this->num = mysql_num_rows($this->result);
  for($i=0;$i < mysql_num_fields($this->result);$i++) {
   $field[$i] = mysql_field_name($this->result,$i);
  }
  for($i=0;$i<$this->num;$i++)  {
   $parray = $this->getRow();
   $array[$i] = $parray;
  }
  return $array;
 }
 
 /**
  * 取得查询所得数据集中一条数据
  * @return Array
  * @access private
  */
 function getRow() {
  $array = array();
  if($this->num==0)
   return $array;
  $fields = mysql_num_fields($this->result);
  $this->row = mysql_fetch_array($this->result);// or die(mysql_error());
  for($i=0;$i<$fields;$i++) {
   $array[mysql_field_name($this->result,$i)] = $this->row[$i];
  }
  return $array;
 }
 
}

?>